package com.zzl.finance.data.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zzl.finance.data.dto.*;
import com.zzl.finance.data.entity.FinancialProductEntity;
import com.zzl.general.common.exception.SysException;
import com.zzl.general.common.serurity.entity.User;
import com.zzl.general.common.utils.PageUtils;

import java.util.List;
import java.util.Map;

/**
 * 金融产品
 *
 * @author wztsl
 * @date 2021-12-22 19:40:27
 */
public interface FinancialProductService extends IService<FinancialProductEntity> {

    /**
     * 分页查询
     *
     * @param params 查询参数
     * @return 分页数据
     */
    PageUtils queryPage(Map<String, Object> params);

    /**
     * 新增
     *
     * @param financialProductAddDto 新增实体
     * @param user                   当前登录用户
     * @throws SysException 业务异常
     */
    void saveFinancialProduct(FinancialProductAddDto financialProductAddDto, User user) throws SysException;

    /**
     * 修改
     *
     * @param financialProductUpdateDto 修改实体
     * @param user                      当前登录用户
     * @throws SysException 业务异常
     */
    void updateFinancialProductById(FinancialProductUpdateDto financialProductUpdateDto, User user) throws SysException;

    /**
     * 通过金融机构ids查询金融机构及关联金融产品
     *
     * @param ids 金融机构id集合
     * @return 金融机构及产品
     */
    List<FinanceInstitutyIncludeProductDto> listAllFinanceInstitutyAndProduct(List<Integer> ids);

    /**
     * 通过金融机构及关联金融产品计算票据融资情况
     *
     * @param ticketMap 票据对象map
     * @return 金融机构、金融产品及融资情况
     * @throws SysException 业务异常
     */
    List<FinanceInstitutyAndProductDto> calcInstitutyAndProduct(Map<String, Object> ticketMap) throws SysException;

    /**
     * 通过金融产品id计算票据融资情况
     *
     * @param ticketMap 票据对象map
     * @param productId 金融产品id
     * @return 金融机构、金融产品及融资情况
     * @throws SysException 业务异常
     */
    FinancialProductCalculateTicketDto calcProduct(Map<String, Object> ticketMap, Integer productId) throws SysException;

    /**
     * 获取金融产品列表数据
     *
     * @return 金融产品集合
     */
    List<FinancialProductDto> getFinancialProductList(User user, String enterpriseId);

    /**
     * 根据金融产品id查询产品信息
     *
     * @param productId 产品id
     * @param user      用户
     * @return 产品信息
     */
    FinancialProductEntity financialProductById(String productId, User user) throws SysException;

    /**
     * 根据资金方id查询产品信息列表,包括资料信息
     *
     * @param financeId 资金方id
     * @param user      用户
     * @return 产品信息列表
     */
    List<FinancialProductInfoDto> getProductByfinanceId(String financeId, User user);

    /**
     * 保存子产品配置
     *
     * @param productAddDtoList 融资产品
     * @param institutyId       金融机构id
     * @param user              用户
     */
    void saveBatchFinancialProduct(List<FinancialProductAddDto> productAddDtoList, String institutyId, User user) throws SysException;
}

